package com.ys.erp.framework.annotation;

import java.lang.annotation.*;

/**
 * @author minamiyama
 * @date 2025/5/15 14:58
 *  * Redisson分布式锁注解
 *  *
 *  * 用于方法上，基于Redisson实现分布式锁，防止并发执行导致数据不一致。
 *  *
 *  * 使用说明：
 *  * 1. 在方法上添加此注解，指定锁的key，支持Spring EL表达式解析方法参数和对象属性。
 *  * 2. key示例：
 *  *      - 只用方法参数字段：@RedissonLock(key = "#user.id")
 *  *        表示锁的key就是user对象的id字段值，如"177446"。
 *  * 3. 方法执行时，如果获取锁失败，会抛出自定义异常（如请勿重复提交），避免重复执行。
 *  * 4. 该注解要求方法的参数必须能被SpEL表达式解析。
 *  *
 *  * 示例：
 *  * <pre>
 *  *  @RedissonLock(key = "#user.id")
 *  *  public void cancelOrder(User user, Order order) {
 *  *      // 业务逻辑
 *  *  }
 *  * </pre>
 *  *
 *  * 注意：
 *  * - 该注解配合AOP使用，确保切面中正确解析锁key和释放锁。
 *  * - key表达式中必须以 # 开头引用参数，如 #user、#order 等。
 */


@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface RedissonLock {

    String key();
}
